using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Xna.Framework;

namespace XnaDevRu.BulletX
{
	/// ISimplexSolver can incrementally calculate distance between origin and up to 4 vertices
	/// Used by GJK or Linear Casting. Can be implemented by the Johnson-algorithm or alternative approaches based on
	/// voronoi regions or barycentric coordinates
	public interface ISimplexSolver
	{
		void Reset();
		void AddVertex(Vector3 w, Vector3 p, Vector3 q);
		bool Closest(out Vector3 v);

		int GetSimplex(out Vector3[] pBuf, out Vector3[] qBuf, out Vector3[] yBuf);
		bool InSimplex(Vector3 w);
		void BackupClosest(out Vector3 v);
		void ComputePoints(out Vector3 pA, out Vector3 pB);

		int NumVertices { get;}
		bool EmptySimplex { get;}
		float MaxVertex { get;}
		bool FullSimplex { get;}
	}
}